<<<<<<< HEAD ## Ejercicio 1 ======= # 1. Data Science ## Pregunta 1 >>>>>>> main
De las siguientes preguntas, clasifica cada una como descriptiva, exploratoria, inferencia, predictiva o causal, y razona brevemente (una frase) el porqué:
1. Dado un registro de vehículos que circulan por una autopista, disponemos de su marca y modelo, país de matriculación, y tipo de vehículo (por número de ruedas). Con tal de ajustar precios de los peajes, ¿Cuántos vehículos tenemos por tipo? ¿Cuál es el tipo más frecuente? ¿De qué países tenemos más vehículos?
Descriptiva, ya que estamos buscando estadíticas del total de vehículos según sus características para hacer un ajuste del precio de los peajes.
2. Dado un registro de visualizaciones de un servicio de video-on-demand, donde disponemos de los datos del usuario, de la película seleccionada, fecha de visualización y categoría de la película, queremos saber ¿Hay alguna preferencia en cuanto a género literario según los usuarios y su rango de edad?
Exploratoria, ya que se está relacionando el rango de edad del usuario con la preferencia del género cinematográfico.
3. Dado un registro de peticiones a un sitio web, vemos que las peticiones que provienen de una red de telefonía concreta acostumbran a ser incorrectas y provocarnos errores de servicio. ¿Podemos determinar si en el futuro, los próximos mensajes de esa red seguirán dando problemas? ¿Hemos notado el mismo efecto en otras redes de telefonía?
Predictiva, ya que intentamos predecir un comportamiento futuro a partir de un registro de peticiones ya realizadas a un sitio web.
4. Dado los registros de usuarios de un servicio de compras por internet, los usuarios pueden agruparse por preferencias de productos comprados. Queremos saber si ¿Es posible que, dado un usuario al azar y según su historial, pueda ser directamente asignado a un o diversos grupos?
Predictiva, porque a partir de los datos que tenemos del historial del usuario, le estamos asignando a un o diversos grupos.
<<<<<<< HEAD ## Ejercicio 2 El segundo apartado de la práctica consiste en el análisis de un fichero de registro de peticiones HTTP, que debéis descargar el fichero adjunto: epa-http.zip, cargar en R, y realizar un análisis
Considera el siguiente escenario:
Sabemos que un usuario de nuestra red empresarial ha estado
usando esta para fines no relacionados con el trabajo, como por ejemplo
tener un servicio web no autorizado abierto a la red (otros usuarios
tienen servicios web activados y autorizados). No queremos tener que
rastrear los puertos de cada PC, y sabemos que la actividad puede haber
cesado. Pero podemos acceder a los registros de conexiones TCP de cada
máquina de cada trabajador (hacia donde abre conexión un PC concreto).
Sabemos que nuestros clientes se conectan desde lugares remotos de forma
legítima, como parte de nuestro negocio, y que un trabajador puede haber
habilitado temporalmente servicios de prueba. Nuestro objetivo es
reducir lo posible la lista de posibles culpables, con tal de
explicarles que por favor no expongan nuestros sistemas sin permiso de
los operadores o la dirección.
Explica con detalle cómo se podría proceder al análisis y resolución del problema mediante Data Science, indicando de donde se obtendrían los datos, qué tratamiento deberían recibir, qué preguntas hacerse para resolver el problema, qué datos y gráficos se obtendrían, y cómo se comunicarían estos.
Obtendríamos los datos de los registros de conexiones TCP salientes por máquina, por ejemplo de los logs del firewall.
Para tratar este conjunto de conexiones TCP primero tendríamos que parsear los datos y normalizarlos para poder trabajar con ellos de forma rápida y eficiente. Además, tendremos que eliminar registros incompletos, asociar cada IP interna a un usuario o equipo concreto.
Para resolver el problema podrían hacerse estas preguntas:
-¿Qué patrón deja un servicio web expuesto?
-¿Qué PCs tienen un número alto de IPs externas únicas conectadas?
-¿Qué PCs reciben conexiones desde múltiples países?
-¿Qué PCs reciben conexiones fuera de horario laboral?
Con este análisis podríamos obtener el siguiente listado de gráficos:
-Histograma: para poder analizar qué IPs externas únicas hay por PC
-Serie temporal: para observar número de conexiones por hora
-Mapa geográfico: para determinar el origen de IPs externas por cada PC
-Heatmap: para poder ver los PC con mayorn número de uso de sus puertos
Para comunicar todo estos datos y gráficos a los trabajadores lo haríamos de una forma no acusatoria, buscando su colaboración mostrandóle los motivos por los cuales su comportamiento no es el adecuado y podría comportar riesgos para la empresa.
Por otro lado, para comunicarsélos a los directivos haríamos uso de estos gráficos con mensajes claros demostrar las conclusiones y soluciones a las que se han llegado con el análisis.
main
- readr
- stringr
Alternativamente, recordad que podéis consultar la sección de
ayuda de RStudio y buscar en la documentación los parámetros, así como
ejemplos de uso (al final de cada página de documentación) para las
funciones (escribiendo ?
Para las siguientes preguntas se requiere usar R. Indica en este documento para cada pregunta el resultado obtenido, describiendo a grandes rasgos el procedimiento seguido para la obtención de la respuesta, justificando cada decisión tomada a la hora de manipular los datos (descartar, agrupar, transformar, etc).
Asegúrate de entregar también el código en un fichero aparte, para poder ejecutarse directamente en un terminal limpio de R.
Limpiamos los datos e indicamos el tipo de dato de cada campo:
Mediante la librería ‘stringr’ impiamos el símbolo ” que se encuentra al inicio de cada valor del campo Tipo y el símbolo ” que se encuentra al final de cada valor del campo Protocolo.
Campo ResponseCode lo cambiamos al tipo de dato factor, ya que son “etiquetas”, no son valores númericos.
Campo Bytes lo cambiamos al tipo de dato integer, ya que si que nos interesa tratarlo como valor númerico.
| IP | Timestamp | Tipo | URL | Protocolo | ResponseCode | Bytes |
|---|---|---|---|---|---|---|
| 141.243.1.172 | [29:23:53:25] | GET | /Software.html | HTTP/1.0 | 200 | 1497 |
| query2.lycos.cs.cmu.edu | [29:23:53:36] | GET | /Consumer.html | HTTP/1.0 | 200 | 1325 |
| tanuki.twics.com | [29:23:53:53] | GET | /News.html | HTTP/1.0 | 200 | 1014 |
| wpbfl2-45.gate.net | [29:23:54:15] | GET | / | HTTP/1.0 | 200 | 4889 |
| wpbfl2-45.gate.net | [29:23:54:16] | GET | /icons/circle_logo_small.gif | HTTP/1.0 | 200 | 2624 |
| wpbfl2-45.gate.net | [29:23:54:18] | GET | /logos/small_gopher.gif | HTTP/1.0 | 200 | 935 |
Utilizando libreria DT podemos mostrar todo el conjunto de datos, incluyendo un buscador:
Hay que tener en cuenta el consumo que conlleva y el volumen de datos con el que estemos trabajando
Una vez cargado el Dataset a analizar, comprobando que se cargan las IPs, el Timestamp, la Petición (Tipo, URL y Protocolo), Código de respuesta, y Bytes de reply.
1. Cuales son las dimensiones del dataset cargado (número de filas y columnas)
Número filas:
47748
Justificación: utilizamos nrow para obtener el número de filas.
Número columnas:
7
Justificación: Utilizamos ncol para obtener el número de columnas.
2. Valor medio de la columna Bytes
7352.335
Justificación: Utilizamos mean para calcular el valor medio de la columna Bytes, indicamos que se ignores valores NA.
De las diferentes IPs de origen accediendo al servidor, ¿cuantas pertenecen a una IP claramente educativa (que contenga “.edu”)?
6539
Justificación: Utilizamos grepl para filtrar peticiones que contengan “.edu” en el campo IP, obtenemos el total de peticiones que cumplen este filtro.
De todas las peticiones recibidas por el servidor cual es la hora en la que hay mayor volumen de peticiones HTTP de tipo “GET”?
Justificación: Generamos un nuevo dataframe donde únicamente estén las filas con GET, añadimos una nueva columna Hora con las diferentes horas del día que se encuentran en la columna Timestamp y agrupamos por horas. Creamos un dataframe con únicamente 2 columnas: Hora (0-23) y número de peticiones por hora; si ordenamos en orden descendente y solo mostramos la primera fila, tenemos la hora en la que mayor volumen hay:
14
| Hora | n |
|---|---|
| 14 | 4546 |
| 13 | 4202 |
| 15 | 4122 |
| 16 | 3950 |
| 12 | 3707 |
Probamos barplot para generar un gráfico de barras que nos informe del número de peticiones HTTP GET por hora:
De las peticiones hechas por instituciones educativas (.edu), ¿Cuantos bytes en total se han transmitido, en peticiones de descarga de ficheros de texto “.txt”?
El número total de Bytes que se han transmitido en las peticiones de descarga de ficheros de texto son:
2705408
Justificación: De las 6539 peticiones que contienen “.edu” en el campo IP, filtramos de igual forma aquellas que tienen una extensión “.txt” en el campo URL. Calculamos el total sumando las peticiones que cumplen con estas condiciones.
Si separamos la petición en 3 partes (Tipo, URL, Protocolo), usando str_split y el separador ” ” (espacio), ¿cuantas peticiones buscan directamente la URL = “/”?
El número total de peticiones que buscan directamente la URL = "/" son:
2382
Justificación: Hemos calculado el total de filas donde el campo URL contenga el símbolo /
Aprovechando que hemos separado la petición en 3 partes (Tipo, URL, Protocolo) ¿Cuantas peticiones NO tienen como protocolo “HTTP/0.2”?
Peticiones que NO tienen como protocolo HTTP/0.2:
47747
Justificación: Hemos calculado el total de filas que NO tienen como valor HTTP/0.2